package Inteligencia;

import javax.swing.ImageIcon;

import Naves.*;
import Juego.*;
import TDALista.*;
import TDAPila.*;

/**INTELIGENCIA QUE SE ENCARGA DE MOVER LAS NAVES ENEMIGAS SEGUN LOS PARAMETROS ESTABLECIDOS.*/
public class enemigosAI extends Thread {
		private Gui juego;
		/**CREA UN OBJETO UNICO QUE SERA RELACIONADO CON EL JUEGO, DONDE MAS TARDE EL JUEGO UTILIZARA PARA
		TRASLADAR LAS NAVES DE UN LADO HACIA OTRO DE MANERA RANDOM.
		*/
		public enemigosAI(Gui j){
			juego=j;
		}
		public void run(){ 
			
			Stack<Position<NavesEnemiga>> naveseliminar=new LinkedStack<Position<NavesEnemiga>>();
			while(juego.getUsuario().EstaVivo()){
					try {
						Thread.sleep(50);
					} catch (InterruptedException e) {}
			
					// PARA CADA ENEMIGO DE LA LISTA DE ENEMIGOS DEL JUEGO, SI ESTA VIVO, LA MUEVE SEGUN LOS PARAMETROS ESTABLECIDOS.	
					for(Position<NavesEnemiga> e:juego.getListaEnemigos())
						if(e.element().estaVivo()){e.element().Mover();}
						else{naveseliminar.push(e);}
		
					// METODO QUE SIRVE PARA EVITAR EL CONFLICTO ENTRE HILOS.
					while(!naveseliminar.isEmpty()&&!juego.getUsuario().termino())
						try{
							if (!naveseliminar.top().element().esjefe()){
								juego.SacarEnemigo(naveseliminar.pop());}
								else{juego.getUsuario().setTermino(true);
									juego.ganojuego();}
						}catch(EmptyStackException e){}					
			}
			
			if (!juego.getUsuario().EstaVivo()){			
				if (juego.getUsuario().getVidasRestantes()==0){
					juego.perdiojuego();
					juego.getUsuario().setTermino(true);}
				if (juego.getUsuario().getVidasRestantes()!=0){
					juego.getUsuario().disminuirvidastotales();
					juego.getUsuario().fullVida();
				}
			}
			
		}
			
			
}
